home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / perl5 / 5.8.7 / Digest / base.pm next >
Text File  |  2006-04-25  |  2KB  |  101 lines

  1. package Digest::base;
  2.  
  3. use strict;
  4. use vars qw($VERSION);
  5. $VERSION = "1.00";
  6.  
  7. # subclass is supposed to implement at least these
  8. sub new;
  9. sub clone;
  10. sub add;
  11. sub digest;
  12.  
  13. sub reset {
  14.     my $self = shift;
  15.     $self->new(@_);  # ugly
  16. }
  17.  
  18. sub addfile {
  19.     my ($self, $handle) = @_;
  20.  
  21.     my $n;
  22.     my $buf = "";
  23.  
  24.     while (($n = read($handle, $buf, 4*1024))) {
  25.         $self->add($buf);
  26.     }
  27.     unless (defined $n) {
  28.     require Carp;
  29.     Carp::croak("Read failed: $!");
  30.     }
  31.  
  32.     $self;
  33. }
  34.  
  35. sub add_bits {
  36.     my $self = shift;
  37.     my $bits;
  38.     my $nbits;
  39.     if (@_ == 1) {
  40.     my $arg = shift;
  41.     $bits = pack("B*", $arg);
  42.     $nbits = length($arg);
  43.     }
  44.     else {
  45.     ($bits, $nbits) = @_;
  46.     }
  47.     if (($nbits % 8) != 0) {
  48.     require Carp;
  49.     Carp::croak("Number of bits must be multiple of 8 for this algorithm");
  50.     }
  51.     return $self->add(substr($bits, 0, $nbits/8));
  52. }
  53.  
  54. sub hexdigest {
  55.     my $self = shift;
  56.     return unpack("H*", $self->digest(@_));
  57. }
  58.  
  59. sub b64digest {
  60.     my $self = shift;
  61.     require MIME::Base64;
  62.     my $b64 = MIME::Base64::encode($self->digest(@_), "");
  63.     $b64 =~ s/=+$//;
  64.     return $b64;
  65. }
  66.  
  67. 1;
  68.  
  69. __END__
  70.  
  71. =head1 NAME
  72.  
  73. Digest::base - Digest base class
  74.  
  75. =head1 SYNOPSIS
  76.  
  77.   package Digest::Foo;
  78.   use base 'Digest::base';
  79.  
  80. =head1 DESCRIPTION
  81.  
  82. The C<Digest::base> class provide implementations of the methods
  83. C<addfile> and C<add_bits> in terms of C<add>, and of the methods
  84. C<hexdigest> and C<b64digest> in terms of C<digest>.
  85.  
  86. Digest implementations might want to inherit from this class to get
  87. this implementations of the alternative I<add> and I<digest> methods.
  88. A minimal subclass needs to implement the following methods by itself:
  89.  
  90.     new
  91.     clone
  92.     add
  93.     digest
  94.  
  95. The arguments and expected behaviour of these methods are described in
  96. L<Digest>.
  97.  
  98. =head1 SEE ALSO
  99.  
  100. L<Digest>
  101.